package algorithm;

public class leetcode_0002 {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode root=new ListNode();
        ListNode p=l1;
        ListNode q=l2;
        ListNode s=root;
        int flag=0;
        while(p!=null&&q!=null){
            s.next=new ListNode();
            s=s.next;
            if(flag+p.val+q.val>=10){
                s.val=p.val+q.val-10+flag;
                flag=1;
            }
            else{
                s.val=p.val+q.val+flag;
                flag=0;
            }
            p=p.next;
            q=q.next;
        }
        while(p!=null){
            s.next=new ListNode();
            s=s.next;
            if(p.val+flag>=10){
                s.val=p.val+flag-10;
                flag=1;
            }
            else{
                s.val=p.val+flag;
                flag=0;
            }
            p=p.next;
        }
        while (q!=null){
            s.next=new ListNode();
            s=s.next;
            if(q.val+flag>=10){
                s.val=q.val+flag-10;
                flag=1;
            }
            else{
                s.val=q.val+flag;
                flag=0;
            }
            q=q.next;
        }
        if(flag==1){
            s.next=new ListNode(1);
        }
        return root.next;
    }
}
class ListNode {
     int val;
     ListNode next;
     ListNode() {}
     ListNode(int val) { this.val = val; }
     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 }